#!user/bin/env python3
# -- coding: utf-8 --
# @Createtime：2022/5/21
# @Updatetime：16:46
# @Author：Test008
# @File：logging_operate.py
# @Description：
from logging import handlers
import logging

# 格式器
import os.path
import time

"""
只能显示三种
加上level='DEBUG'等级之后可以显示所有的
设置格式器 asctime人类时间 levelname获取等级 message 获取下信息
决定日志生成的最终格式
1.创建格式器
2.处理器添加格式器
3.日志器添加处理器
"""
# fmt = '%(asctime)s-%(levelname)s：%(message)s'
# logging.basicConfig(level='DEBUG', format=fmt)
# logging.debug('姓名是张三。年龄是24岁，无婚史')
# logging.info('这是info信息')
# logging.error('这是error信息')
# logging.warning('这是warning信息')
# logging.critical('这是critical信息')

# 处理器可与将日志输出到控制台，也可以输出到文件中
# 创建处理器——控制台
"""
控制台处理器将日志输出到控制台
方法：logging.StreamHandler()
日志对象默认等级为：WARNING
出现两个等级时，遵循以高等级的而输出规则
"""
# 创建处理器——文件处理器
"""
控制台处理器将日志输出到控制台
方法：logging.FileHandler()
日志对象默认等级为：WARNING
出现两个等级时，遵循以高等级的而输出规则
"""
# 日志同时生成在控制器和文件的步骤
"""
1.定义处理器
a，控制台处理器
b，文件处理器
2.处理器添加添加格式器
a，控制台处理器添加：格式器
b，文件处理器添加：格式器
3.日志器添加处理器
a，日志器添加：控制台处理器
b，日志器添加：文件处理器
"""

# 第1步.创建日志对象,设置输出的同意格式
logger = logging.getLogger()
logger.setLevel(level=logging.DEBUG)
fmt = logging.Formatter('%(asctime)s-%(filename)s[line:%(lineno)d]-%(levelname)s：%(message)s')

# 第2步，创建控制台处理器
console_handler = logging.StreamHandler()
# 控制台的等级,格式
console_handler.setLevel(logging.DEBUG)
console_handler.setFormatter(fmt)
# 日志器添加控制台处理器
logger.addHandler(console_handler)

# 第3步,创建文件处理器 TimedRotatingFileHandler按照时间分割生成日志
# file_handler = logging.FileHandler('./log.csv', encoding='utf8')
file_handler = handlers.TimedRotatingFileHandler('./log.csv', when='D', encoding='utf-8')
# 文件处理器等级,格式
file_handler.setLevel(level=logging.INFO)
file_handler.setFormatter(fmt)
# 文件处理器添加到控制台处理器
logger.addHandler(file_handler)

# 测试一下
if __name__ == '__main__':
    logger.info('这是info信息')
    logger.debug('这是debug信息')
    # logging.warning('这是warning信息')
    # logging.error('这是error信息')
    # logging.critical('这是critical信息')
"""
DEBUG	详细信息，一般只在调试问题时使用。
INFO	证明事情按预期工作。
WARNING	某些没有预料到的事件的提示，或者在将来可能会出现的问题提示。例如：磁盘空间不足。但是软件还是会照常运行。
ERROR	由于更严重的问题，软件已不能执行一些功能了。
CRITICAL	严重错误，表明软件已不能继续运行了。

Formatter对象设置日志信息最后的规则、结构和内容，默认的时间格式为%Y-%m-%d %H:%M:%S

Handlers
1) logging.StreamHandler -> 控制台输出 
2) logging.FileHandler  -> 文件输出
3) logging.handlers.RotatingFileHandler -> 按照大小自动分割日志文件，一旦达到指定的大小重新生成文件 
4) logging.handlers.TimedRotatingFileHandler  -> 按照时间自动分割日志文件 

when参数是一个字符串。表示时间间隔的单位，不区分大小写。它有以下取值：
S 秒
M 分
H 小时
D 天
W 每星期（interval==0时代表星期一）
midnight 每天凌晨
"""